package com.rj.core.validation.constraints;

import com.rj.core.validation.StrFieldValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;

/***
 * 字符属性校验
 * @author YFX_RANLUBO
 * @date 2022/10/25 18:00
 */
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {StrFieldValidator.class})
public @interface StringField {
    String message() default "";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 属性名称
     */
    String value();

    /**
     * 是否允许为空
     *
     * @return
     */
    boolean empty() default true;

    /**
     * 正则表达式
     */
    String regexp() default "";

    /**
     * 最大长度
     *
     * @return
     */
    int maxLen() default -1;

    /**
     * 最小长度
     *
     * @return
     */
    int minLen() default -1;

    /**
     * 字符固定长度
     *
     * @return
     */
    int length() default -1;

    /**
     * 字典key(通过key从存储拉取)
     * 与dict任意填写一个,优先取dict
     *
     * @return
     */
    String dictKey() default "";

    /**
     * 选项|与dictKey任意填写一个,优先取dict
     *
     * @return
     */
    String[] dict() default {};
}